package br.com.mrh.entity;

/**
 * Representa um <b>Usuario</b>
 * @author 	alex.paula
 * @since  	16/02/2012
 * @version 1.0
 */
public class Usuario implements IBaseEntidade {
	
	/**
	 * serialVersionUID
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * id do Perfil
	 */
	private Integer 	idUsuario;
	
	/**
	 * Nome do Usuario
	 */
	private String 		cdUsuario;
	
	/**
	 * Senha do Usuario
	 */
	private String		cdSenha;
	
	/**
	 * Indicador de Usuario ativo
	 */
	private Boolean		inAtivo;
	
	/**
	 * Codigo do Perfil
	 */
	private Integer		idPerfil;
	
	/**
	 * Objeto perfil
	 */
	private Perfil		perfil;
	
	/**
	 * Objeto email padrao
	 */
	private Email		emailPadrao;
	
	@Override
	public Integer getId() {
		return idUsuario;
	}

	public Integer getIdUsuario() {
		return idUsuario;
	}

	public void setIdUsuario(Integer idUsuario) {
		this.idUsuario = idUsuario;
	}

	public String getCdUsuario() {
		return cdUsuario;
	}

	public void setCdUsuario(String cdUsuario) {
		this.cdUsuario = cdUsuario;
	}

	public String getCdSenha() {
		return cdSenha;
	}

	public void setCdSenha(String cdSenha) {
		this.cdSenha = cdSenha;
	}

	public Boolean getInAtivo() {
		return inAtivo;
	}

	public void setInAtivo(Boolean inAtivo) {
		this.inAtivo = inAtivo;
	}

	public Integer getIdPerfil() {
		return idPerfil;
	}

	public void setIdPerfil(Integer idPerfil) {
		this.idPerfil = idPerfil;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
		setIdPerfil(perfil.getId());
	}

	public Email getEmailPadrao() {
		return emailPadrao;
	}

	public void setEmailPadrao(Email emailPadrao) {
		this.emailPadrao = emailPadrao;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cdSenha == null) ? 0 : cdSenha.hashCode());
		result = prime * result
				+ ((cdUsuario == null) ? 0 : cdUsuario.hashCode());
		result = prime * result
				+ ((emailPadrao == null) ? 0 : emailPadrao.hashCode());
		result = prime * result
				+ ((idPerfil == null) ? 0 : idPerfil.hashCode());
		result = prime * result
				+ ((idUsuario == null) ? 0 : idUsuario.hashCode());
		result = prime * result + ((inAtivo == null) ? 0 : inAtivo.hashCode());
		result = prime * result + ((perfil == null) ? 0 : perfil.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Usuario other = (Usuario) obj;
		if (cdSenha == null) {
			if (other.cdSenha != null)
				return false;
		} else if (!cdSenha.equals(other.cdSenha))
			return false;
		if (cdUsuario == null) {
			if (other.cdUsuario != null)
				return false;
		} else if (!cdUsuario.equals(other.cdUsuario))
			return false;
		if (emailPadrao == null) {
			if (other.emailPadrao != null)
				return false;
		} else if (!emailPadrao.equals(other.emailPadrao))
			return false;
		if (idPerfil == null) {
			if (other.idPerfil != null)
				return false;
		} else if (!idPerfil.equals(other.idPerfil))
			return false;
		if (idUsuario == null) {
			if (other.idUsuario != null)
				return false;
		} else if (!idUsuario.equals(other.idUsuario))
			return false;
		if (inAtivo == null) {
			if (other.inAtivo != null)
				return false;
		} else if (!inAtivo.equals(other.inAtivo))
			return false;
		if (perfil == null) {
			if (other.perfil != null)
				return false;
		} else if (!perfil.equals(other.perfil))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Usuario [idUsuario=" + idUsuario + ", cdUsuario=" + cdUsuario
				+ ", cdSenha=" + cdSenha + ", inAtivo=" + inAtivo
				+ ", idPerfil=" + idPerfil + ", perfil=" + perfil
				+ ", emailPadrao=" + emailPadrao + "]";
	}

}
